package com.jade.bss.ec.ware;

import java.util.List;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 商品规格数据访问接口。
 */
public interface WareSpecDao
{
    /**
     * 设置分类或者商品的规格类型名称。
     *
     * @param define 商品规格定义
     * @throws WareException 处理异常
     */
    public void setSpecDefine(WareSpecDefine define)
            throws WareException;


    /**
     * 列出一个商品的所有规格定义，主要是获取规格类型的名称。
     *
     * @param ownerType 商品所有者类型
     * @param ownerId 商品所有者标识
     * @param cid 商品分类
     */
    public List<WareSpecDefine> listSpecDefine(String ownerType, String ownerId, long cid, Criteria criteria);

    /**
     * 新增规格。
     *
     * @param spec 规格
     * @throws WareException 处理异常
     */
    public void addSpec(WareSpec spec)
            throws WareException;

    /**
     * 更新规格信息。
     *
     * @param spec 规格
     * @throws WareException 处理异常
     */
    public void updateSpec(WareSpec spec)
            throws WareException;

    /**
     * 删除规格。
     *
     * @param spec 规格
     * @throws WareException 处理异常
     */
    public void removeSpec(WareSpec spec)
            throws WareException;

    /**
     * 获取规格信息。
     *
     * @param id 规格标识
     * @return 规格
     * @throws WareException 处理异常
     */
    public WareSpec getSpec(long id)
            throws WareException;

    /**
     * 列出一个商品指定类型的规格。
     *
     * @param ownerType 商品所有者类型
     * @param ownerId 商品所有者标识
     * @param cid 商品分类
     * @param type 规格类型
     * @param criteria 查询条件
     * @return 规格列表
     */
    public List<WareSpec> listSpec(String ownerType, String ownerId, long cid, int type, Criteria criteria);

    /**
     * 根据条件分页列出一个分类下面的制定类型的规格列表。
     *
     * @param ownerType 商品所有者类型
     * @param ownerId 商品所有者标识
     * @param cid 商品分类
     * @param type 规格类型
     * @param criteria 查询条件
     * @return 规格列表
     */
    public PagingList<WareSpec> querySpec(String ownerType, String ownerId, long cid, int type, Criteria criteria);

}
